<?php
/**
 * Page gestion des batiments
 * Permet l'affichage, l'ajout, la suppression et la modification de batiments
 *
 * @category actions
 * @package administration
 *
 * @author M.CASTANHEIRO, M.MEUNIER, O.PATTE, C.PORTEMER, R.THERY-HERMAIN
 * @version 1.0
 */
class batimentAction extends shAction {
    /**
     * Fonction appellée automatiquement pour toutes les requêtes de l'action
     */
    public function init() {
	$this->setTitle('Gestion des bâtiments');
	$this->addAriane(shRequest::link('administration'), 'Administration');
	$this->addAriane(shRequest::link('administration', 'salle'), 'Gestion des salles');
    }

    /**
     * Ajout d'un batiment
     */
    public function executeCreate() {
	$this->setTitle('Ajout d\'un bâtiment');

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Ajouter ce bâtiment');

	// Intitulé de la salle
	shField::text('Intitulé')->appendTo($formulaire);

	$formulaire->setCheck(function($formulaire) {
		    if (!$formulaire->isError()) {
			// On vérifie qu'on a pas le même intitulé qui existe
			$salle = shSGBD::selectOne('SELECT count(batiment.id) AS count '.
				'FROM batiment '.
				'WHERE intitule=:intitule',
				array (':intitule'=>$formulaire->getField('Intitulé')->getValue()));
			if ($salle->count > 0) {
			    $formulaire->getField('Intitulé')->setError('Un autre bâtiment possède le même intitulé');
			}
		    }
		})


	;

	$formulaire->setSubmit(function($formulaire) {
		    // On crée le nouveau profil
		    shSGBD::update('INSERT INTO batiment (intitule) VALUES (:intitule ) ',
			    array( ':intitule' => $formulaire->getField('Intitulé')->getValue()));
		    shAction::redirect('administration','salle');
		})


	;

	$this->assign('formulaire', $formulaire);
    }


    /**
     * Modification d'un batiment
     * @param <integer> Identifiant du batiment à modifier
     */
    public function executeEdit($id_batiment) {
	$this->setTitle('Modification d\'un bâtiment');

	// On récupère le batiment
	if ( !($batiment = shSGBD::selectOne(
	'SELECT  batiment.id, batiment.intitule FROM batiment '.
	'WHERE id=?'
	,array($id_batiment)
	)) ) {
	    throw new Exception('Le bâtiment demandé n\'existe pas');
	    return false;
	}

	$formulaire = new shFormulaire;
	$formulaire->setSubmitText('Modifier ce bâtiment');

	// Intitulé de la salle
	shField::text('Intitulé')
		->setValue($batiment->intitule)
		->appendTo($formulaire);

	$formulaire->setCheck(function($formulaire) use ($batiment) {
		    if (!$formulaire->isError()) {
			// On vérifie qu'on a pas le même intitulé qui existe
			if ( shSGBD::count(
				'SELECT count(batiment.id) '.
				'FROM batiment '.
				'WHERE intitule=:intitule AND id!=:id ',
				array (':intitule' => $formulaire->getField('Intitulé')->getValue(),
				':id' => $batiment->id)) > 0)
			    $formulaire->getField('Intitulé')->setError('Une autre salle possède le même intitulé');
		    }
		})

	;

	$formulaire->setSubmit(function($formulaire) use ($batiment) {
		    // On crée le nouveau profil
		    shSGBD::update('UPDATE batiment SET intitule=:intitule '.
			    'WHERE id=:id',
			    array( ':intitule' => $formulaire->getField('Intitulé')->getValue(),
			    ':id' => $batiment->id));
		    shAction::redirect('administration','salle');
		})

	;

	$this->assign('formulaire', $formulaire);
    }


    /**
     *
     * @todo Faire le remplacement en salle xxx des salles liées a des cours ou autre
     */
    public function executeDelete($_id_batiment) {
	$this->setTitle('Suppression d\'un bâtiment');

	// On récupère les salles liés au batiment
	$salles = shSGBD::select('SELECT id FROM salle WHERE id_batiment=?', array($_id_batiment));

	// On supprime les salles
	shSGBD::delete('DELETE FROM salle WHERE id_batiment=?',array($_id_batiment));

	// Ensuite on termine la suppression du batiment
	shSGBD::delete('DELETE FROM batiment WHERE id=?',array($_id_batiment));

	// On met à jour toutes les séances en assignant null aux salles supprimées
	$idsSalles = array();
	foreach ($salles as $salle) {
	    $idsSalles[] = $salle->id;
	}

	if (!empty($salles)) {
	    shSGBD::update('UPDATE seance SET id_salle=null '.
		    'WHERE id_salle IN (?'.str_repeat(',? ', sizeof($idsSalles) - 1).') '
		    ,$idsSalles);
	}

	// On retourne sur la page
	shAction::redirect('administration','salle');

    }
}
?>